<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of MyRedis
 *
 * @author prostar
 */
class MyRedis {

	private $redis;
	private $key;
	static $instance = NULL;

	/**
	 * 初始化Redis 
	 * $config = array( 
	 *  'server' => '127.0.0.1' 服务器 
	 *  'port'   => '6379' 端口号 
	 * ) 
	 * @param array $config 
	 */
	public function __construct($dbconfig) {
		if (!extension_loaded('redis')) {
			exit('服务器不支持redis扩展');
		}
		if (!isset($this->redis)) {
			$this->connect($dbconfig['host'], $dbconfig['port']);
			$this->key = GAME . '_' . ENVIRONMENT . '_';
			if (isset($dbconfig['sec'])) {
				$this->key .=$dbconfig['sec'] . '_';
			}
			//if (!empty($dbconfig[Redis::OPT_SERIALIZER])) {
			//	$this->redis->setOption(Redis::OPT_SERIALIZER, $dbconfig[Redis::OPT_SERIALIZER]);
			//}
		}
	}

	private function connect($host, $port) {
		try {
			$this->redis = new Redis();
			$this->redis->connect($host, $port);
		} catch (Exception $exc) {
			echo $exc->getMessage();
		}
	}

	public function __call($name, $args) {
		var_dump($name);
		var_dump($args);
	}

	/**
	 * 设置值 
	 * @param string $key KEY名称 
	 * @param string|array $value 获取得到的数据 
	 * @param int $timeOut 时间 
	 */
	public function set($key, $value, $timeOut = 0) {
		$key = $this->key . $key;
		$retRes = $this->redis->set($key, $value);
		if ($timeOut > 0)
			$this->redis->setTimeout($key, $timeOut);
		return $retRes;
	}

	/**
	 * 通过KEY获取数据 
	 * @param string $key KEY名称 
	 */
	public function get($key) {
		$key = $this->key . $key;
		return $this->redis->get($key);
	}

	/**
	 * 获取list队列的index位置的元素值 
	 * @param $list string 队列名 
	 * @param $index int 队列元素开始位置 默认0 
	 * @param $end int 队列元素结束位置 $index=0,$end=-1:返回队列所有元素 
	 */
	public function listGet($list, $index = 0, $end = null) {
		$key = $this->key . $key;
		$return = null;

		if ($end) {
			$return = $this->redis->lRange($list, $index, $end);
		} else {
			$return = $this->redis->lGet($list, $index);
		}

		return $return;
	}

	/**
	 * 删除一条数据
	 * @param string $key KEY名称
	 */
	public function delete($key) {
		$key = $this->key . $key;
		return $this->redis->delete($key);
	}

	/**
	 * 清空数据
	 */
	public function flushAll() {
		return $this->redis->flushAll();
	}

	/**
	 * 数据入队列
	 * @param string $key KEY名称
	 * @param string|array $value 获取得到的数据
	 * @param bool $right 是否从右边开始入
	 */
	public function push($key, $value, $right = true) {
		if (empty($key)) {
			return FALSE;
		}
		$key = $this->key . $key;
		if (!is_string($value)) {
			$value = json_encode($value, JSON_FORCE_OBJECT);
		}

		return $right ? $this->redis->rPush($key, $value) : $this->redis->lPush($key, $value);
	}

	/**
	 * 数据出队列
	 * @param string $key KEY名称
	 * @param bool $left 是否从左边开始出数据
	 */
	public function pop($key, $left = true) {
		$key = $this->key . $key;
		$val = $left ? $this->redis->lPop($key) : $this->redis->rPop($key);
		return json_decode($val);
	}

	/**
	 * 数据自增
	 * @param string $key KEY名称
	 */
	public function increment($key) {
		$key = $this->key . $key;
		return $this->redis->incr($key);
	}

	/**
	 * 数据自减
	 * @param string $key KEY名称
	 */
	public function decrement($key) {
		$key = $this->key . $key;
		return $this->redis->decr($key);
	}

	/**
	 * key是否存在，存在返回ture
	 * @param string $key KEY名称
	 */
	public function exists($key) {
		$key = $this->key . $key;
		return $this->redis->exists($key);
	}

}

?>
